# Read in a tx2gene file with transcript identifiers in the first column and gene identifiers in the second column
tx2gene <- hsdb[, c("tx_id", "gene_id")]
# Run tximport
txi_file <- "data/txi.day8.RDS"
if (!rebuild_rds & file.exists(txi_file)){
txi <- readRDS(txi_file)
}else{
files <- files[rownames(meta)]
txi <- tximport(files,
type = "salmon",
tx2gene = tx2gene,
countsFromAbundance = "lengthScaledTPM",
ignoreTxVersion = FALSE)
saveRDS(txi, txi_file)
}
# Look at the counts
class(txi)
## [1] "list"
attributes(txi)
## $names
## [1] "abundance" "counts" "length"
## [4] "countsFromAbundance"
txi$counts %>% View()
When you have annotations that are from a different source from your reference you can run into problems (i.e lose genes). Some checks you can do before proceeding:
dim(txi$counts)tximport() you will get a message in your console. If you see something like transcripts missing from tx2gene start troubleshooting.dim(txi$counts)
## [1] 58735 22
It is always a good idea to check if:
### Check that sample names match in both files
all(colnames(txi$counts) %in% rownames(meta))
## [1] TRUE
### Check that sample names match in both files
all(colnames(txi$counts) %in% rownames(meta))
## [1] TRUE
### Check that all samples are in the same order
meta <- meta[colnames(txi$counts),]
all(colnames(txi$counts) == rownames(meta))
## [1] TRUE
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
Here we subset protein coding genes.
## Create DESeq2Dataset object
dds_file <- "data/dds.day8.RDS"
meta$treatment <- as.factor(meta$treatment)
meta$response <- as.factor(meta$response)
meta$er <- as.factor(meta$er)
meta$date_of <- as.factor(meta$date_of)
meta$tumor_percentage <- as.factor(meta$tumor_percentage)
meta$tumor_percentage_high <- as.factor(meta$tumor_percentage_high)
meta$tumor_percentage_high <- relevel(meta$tumor_percentage_high, "low")
if (remove_cases_2_19){
non_responders <- meta %>% dplyr::filter(study_id %in% c(2, 19)) %>% row.names()
}
if (!rebuild_rds & file.exists(dds_file)){
dds <- readRDS(dds_file)
}else{
dds <- DESeqDataSetFromTximport(txi,
colData = meta,
design = ~response)
if (remove_cases_2_19){
dds <- dds[,!colnames(dds) %in% non_responders]
}
design(dds) <- formula(~response + er + tumor_percentage_high + date_of)
# subset protein-coding genes
pc_genes <- intersect(protein_coding_genes$ensembl_gene_id, row.names(dds))
dds <- dds[pc_genes,]
# 100 reads / 20 samples
keep <- rowSums(counts(dds)) >= 100
dds <- dds[keep,]
# Run DESeq2
dds <- DESeq(dds)
saveRDS(dds, dds_file)
}
counts <- counts(dds, normalized = TRUE)
design <- as.data.frame(colData(dds))
degCheckFactors(counts[, 1:20])
res <- results(dds)
degQC(counts, design[["response"]], pvalue = res[["pvalue"]])
degQC(counts, design[["er"]], pvalue = res[["pvalue"]])
degQC(counts, design[["tumor_percentage_high"]], pvalue = res[["pvalue"]])
mdata <- colData(dds) %>% as.data.frame() %>%
dplyr::select(response, er, date_of, tumor_percentage_high)
#resCov <- degCovariates(log2(counts(dds)+0.5), mdata)
mdata %>% ggplot(aes(tumor_percentage_high, fill = response)) + geom_bar(position = "dodge2")
cor <- degCorCov(mdata)
mdata %>% ggplot(aes(date_of, fill = response)) + geom_bar(position = "dodge2")
### Transform counts for data visualization (unsupervised analysis)
rld_file <- "data/rld.day8.RDS"
if (!rebuild_rds & file.exists(rld_file)){
rld <- readRDS(rld_file)
}else{
rld <- rlog(dds, blind = TRUE)
saveRDS(rld, rld_file)
}
class(rld) # what type of object is this
## [1] "DESeqTransform"
## attr(,"package")
## [1] "DESeq2"
# we also need just a matrix of transformed counts
rld_mat <- assay(rld)
# Use the DESeq2 function
plotPCA(rld, intgroup = c("response")) + geom_label_repel(aes(label = name))
# Use the DESeq2 function
plotPCA(rld, intgroup = c("er")) + geom_label_repel(aes(label = name))
# Use the DESeq2 function
plotPCA(rld, intgroup = c("tumor_percentage")) + geom_label_repel(aes(label = name))
# Use the DESeq2 function
plotPCA(rld, intgroup = c("tumor_percentage_high")) + geom_label_repel(aes(label = name))
# Use the DESeq2 function
plotPCA(rld, intgroup = c("date_of")) + geom_label_repel(aes(label = name))
# Correlation matrix
rld_cor <- cor(rld_mat)
meta$study_id <- as.factor(meta$study_id)
# Create annotation file for samples
annotation <- meta[, c("response", "er", "tumor_percentage_high", "date_of")]
# Change colors
heat.colors <- brewer.pal(6, "Blues")
# Plot heatmap
pheatmap(rld_cor,
annotation = annotation,
border = NA,
fontsize = 20)
# Correlation matrix
rld_cor <- cor(rld_mat)
meta$study_id <- as.factor(meta$study_id)
# Create annotation file for samples
annotation <- meta[, c("response", "er", "tumor_percentage_high", "date_of", "study_id")]
# Change colors
heat.colors <- brewer.pal(6, "Blues")
# Plot heatmap
pheatmap(rld_cor,
annotation = annotation,
border = NA,
fontsize = 20)
Gene example
d <- plotCounts(dds,
gene = "ENSG00000130234",
intgroup = "response",
returnData = TRUE)
ggplot(d, aes(x = response, y = count)) +
geom_point(position = position_jitter(w = 0.1, h = 0)) +
geom_text_repel(aes(label = rownames(d))) +
theme_bw(base_size = 10) +
ggtitle("ACE2") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_y_log10()
# Add a column for significant genes
resResponse_tb_vis <- resResponse_tb %>% mutate(threshold = padj < 0.01)
# don't show labels for lfc < 1.5
resResponse_tb_vis$symbol <- ifelse((abs(resResponse_tb_vis$log2FoldChange) > 1.5),
resResponse_tb_vis$symbol, "")
# don't show labels for non-significant genes
resResponse_tb_vis$symbol <- ifelse(resResponse_tb_vis$threshold,
resResponse_tb_vis$symbol, "")
#fig4b
# suggested by Jennifer
dont_show <- c("C20orf204", "B4GALNT4", "SMIM34B", "ARHGAP33",
"ATRNL1", "CROCC2", "CEL", "FLG", "KIAA1549L",
"AHRR", "SLC25A27", "CPLX1", "SNX10", "STX11",
"FUCA1", "ACP5", "MS4A4A", "GM2A", "TYROBP", "GBP5",
"SASH3", "CTSL", "TFEC", "DNASE2", "IGSF6", "IFI30", "LGALS3",
"FCER1G", "VNN2", "SELPLG", "GPX1", "TAGAP", "PRDX1", "SLAMF8",
"SSR4", "LST1", "VMO1", "OMD", "PRB2", "TBX21", "LIPA", "COMMD3-BMI1",
"SOWAHD", "LGALS2", "SLAMF6", "SH2D1A", "ALDH2", "PTPRCAP")
resResponse_tb_vis[resResponse_tb_vis$symbol %in% dont_show,]$symbol <- ""
# no highlighting
#resResponse_tb_vis$highlight <- ifelse(resResponse_tb_vis$symbol %in% genes_to_show,
# "yes", "no")
# a handful of extreme genes are not shown, like PRSS33
fig4b <- ggplot(resResponse_tb_vis,
aes(log2FoldChange, -log10(padj), label = symbol)) +
geom_point(aes(colour = threshold)) +
ggtitle("Response pCR vs non-pCR") +
xlab("log2 fold change") +
ylab("-log10 adjusted p-value") +
scale_x_continuous(limits = c(-10, 10)) +
scale_y_continuous(limits = c(0, 7)) +
theme(legend.position = "none",
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = rel(1.25)),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank()) +
geom_label_repel(aes(label = symbol),
data = subset(resResponse_tb_vis, log2FoldChange > 0),
size = 5,
min.segment.length = 0,
segment.size = 0.1,
segment.color = "grey50",
direction = "both",
max.overlaps = Inf,
segment.linetype = 5,
max.iter = Inf,
hjust = "right",
xlim = c(3, 10),
force = 5,
force_pull = 0
) +
geom_label_repel(aes(label = symbol),
data = subset(resResponse_tb_vis, log2FoldChange < 0),
size = 5,
min.segment.length = 0,
segment.size = 0.1,
segment.color = "grey50",
direction = "both",
max.overlaps = Inf,
segment.linetype = 5,
max.iter = Inf,
hjust = "left",
xlim = c(-9, -4),
force = 5,
force_pull = 0
)
# nudge_x = 9 - subset(resResponse_tb_vis, log2FoldChange > 0)$log2FoldChange,
#force_pull = 0, # attraction between label and point
# force = 0.5 # repulsion between labels
#point.padding = 1,,
# point.size = NA,
# arrow = arrow(length = unit(0.015, "npc")),
# segment.linetype = 1,
# box.padding = 0.5,
# force_pull = 0,
# force = 1
saveRDS(fig4b, "data/fig4b.RDS")
fig4b
# Add a column for significant genes
resER_tb <- resER_tb %>% mutate(threshold = padj < 0.01)
ggplot(resER_tb) +
geom_point(aes(x = log2FoldChange, y = -log10(padj), colour = threshold)) +
ggtitle("ER: Positive vs Negative") +
xlab("log2 fold change") +
ylab("-log10 adjusted p-value") +
scale_x_continuous(limits = c(-10,10)) +
theme(legend.position = "none",
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = rel(1.25)))
# Add a column for significant genes
resTP_tb <- resTP_tb %>% mutate(threshold = padj < 0.01)
ggplot(resTP_tb) +
geom_point(aes(x = log2FoldChange, y = -log10(padj), colour = threshold)) +
ggtitle("Tumor_percentage_high: High vs Low") +
xlab("log2 fold change") +
ylab("-log10 adjusted p-value") +
scale_x_continuous(limits = c(-10,10)) +
theme(legend.position = "none",
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = rel(1.25)))
# Add a column for significant genes
resDO_tb <- resDO_tb %>% mutate(threshold = padj < 0.01)
ggplot(resDO_tb) +
geom_point(aes(x = log2FoldChange, y = -log10(padj), colour = threshold)) +
ggtitle("Dafe of: 20180323 vs 20180228") +
xlab("log2 fold change") +
ylab("-log10 adjusted p-value") +
scale_x_continuous(limits = c(-10,10)) +
theme(legend.position = "none",
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = rel(1.25)))
# Create a matrix of normalized expression
sig_up <- resResponse_tb_significant %>% arrange(-log2FoldChange) %>% head(50) %>% pull(gene)
sig_down <- resResponse_tb_significant %>% arrange(log2FoldChange) %>% head(50) %>% pull(gene)
sig <- c(sig_up, sig_down)
row_annotation <- gene_symbol %>%
as_tibble() %>%
dplyr::filter(gene_id %in% sig)
plotmat <- txi$abundance[c(sig_up, sig_down),] %>% as.data.frame() %>%
rownames_to_column(var = "ensembl_gene_id") %>%
left_join(gene_symbol, by = c("ensembl_gene_id" = "gene_id")) %>%
drop_na(symbol)
plotmat$ensembl_gene_id <- NULL
plotmat <- plotmat %>% column_to_rownames(var = "symbol") %>% as.matrix()
# Color palette
heat.colors <- brewer.pal(6, "YlOrRd")
# Plot heatmap
pheatmap(plotmat,
scale = "row",
show_rownames = TRUE,
border = FALSE,
annotation = meta[, c("response"), drop = FALSE],
main = "Top 50 Up- and Down- regulated genes in Response: pCR vs non-pCR",
fontsize = 20)
# Create a matrix of normalized expression
sig_up <- resER_tb_significant %>% arrange(-log2FoldChange) %>% head(50) %>% pull(gene)
sig_down <- resER_tb_significant %>% arrange(log2FoldChange) %>% head(50) %>% pull(gene)
sig <- c(sig_up, sig_down)
row_annotation <- gene_symbol %>%
as_tibble() %>%
dplyr::filter(gene_id %in% sig)
plotmat <- txi$abundance[c(sig_up, sig_down),] %>% as.data.frame() %>%
rownames_to_column(var = "ensembl_gene_id") %>%
left_join(gene_symbol, by = c("ensembl_gene_id" = "gene_id")) %>%
drop_na(symbol)
plotmat$ensembl_gene_id <- NULL
plotmat <- plotmat %>% column_to_rownames(var = "symbol") %>% as.matrix()
# Color palette
heat.colors <- brewer.pal(6, "YlOrRd")
# Plot heatmap
pheatmap(plotmat,
scale = "row",
show_rownames = TRUE,
border = FALSE,
annotation = meta[, c("er"), drop = FALSE],
main = "Top 50 Up- and Down- regulated genes in ER: positive vs negative",
fontsize = 20)
# Create a matrix of normalized expression
sig_up <- resTP_tb_significant %>% arrange(-log2FoldChange) %>% head(50) %>% pull(gene)
sig_down <- resTP_tb_significant %>% arrange(log2FoldChange) %>% head(50) %>% pull(gene)
sig <- c(sig_up, sig_down)
row_annotation <- gene_symbol %>%
as_tibble() %>%
dplyr::filter(gene_id %in% sig)
plotmat <- txi$abundance[c(sig_up, sig_down),] %>% as.data.frame() %>%
rownames_to_column(var = "ensembl_gene_id") %>%
left_join(gene_symbol, by = c("ensembl_gene_id" = "gene_id")) %>%
drop_na(symbol)
plotmat$ensembl_gene_id <- NULL
plotmat <- plotmat %>% column_to_rownames(var = "symbol") %>% as.matrix()
# Color palette
heat.colors <- brewer.pal(6, "YlOrRd")
# Plot heatmap
pheatmap(plotmat,
scale = "row",
show_rownames = TRUE,
border = FALSE,
annotation = meta[, c("tumor_percentage_high"), drop = FALSE],
main = "Top Up/Down-regulated genes in Tumor_percentage_high: high vs low",
fontsize = 20)
# Create a matrix of normalized expression
sig_up <- resDO_tb_significant %>% arrange(-log2FoldChange) %>% head(50) %>% pull(gene)
sig_down <- resDO_tb_significant %>% arrange(log2FoldChange) %>% head(50) %>% pull(gene)
sig <- c(sig_up, sig_down)
row_annotation <- gene_symbol %>%
as_tibble() %>%
dplyr::filter(gene_id %in% sig)
plotmat <- txi$abundance[c(sig_up, sig_down),] %>% as.data.frame() %>%
rownames_to_column(var = "ensembl_gene_id") %>%
left_join(gene_symbol, by = c("ensembl_gene_id" = "gene_id")) %>%
drop_na(symbol)
plotmat$ensembl_gene_id <- NULL
plotmat <- plotmat %>% column_to_rownames(var = "symbol") %>% as.matrix()
# Color palette
heat.colors <- brewer.pal(6, "YlOrRd")
# Plot heatmap
pheatmap(plotmat,
scale = "row",
show_rownames = TRUE,
border = FALSE,
annotation = meta[, c("response"), drop = FALSE],
main = "Top 50 Up- and Down- regulated genes in date_of: 20180323 vs 20180228",
fontsize = 20)
bg_genes <- rownames(resResponse)
## Run GO enrichment analysis
compgo_file <- "data/day8.compgo.up.RDS"
if (file.exists(compgo_file)){
compGO <- readRDS(compgo_file)
}else{
compGO <- enrichGO(gene = sigResponse_up,
universe = bg_genes,
keyType = "ENSEMBL",
OrgDb = "org.Hs.eg.db",
ont = "BP",
qvalueCutoff = 0.05,
pAdjustMethod = "BH",
readable = TRUE)
saveRDS(compGO, compgo_file)
}
dotplot(compGO,
showCategory = 20,
title = "GO (Biological Process) Enrichment \n Analysis for UP in pCR)",
label_format = 20,
font.size = 10)
## Output results from GO analysis to a table
print("UP")
## [1] "UP"
results_up <- data.frame(compGO@result) %>% dplyr::filter(p.adjust < 0.05)
nrow(results_up)
## [1] 458
write_csv(results_up, "tables/T20.day8.GO_BP_UP.csv")
compgo_file <- "data/day8.compgo.down.RDS"
if (file.exists(compgo_file)){
compGO <- readRDS(compgo_file)
}else{
compGO <- enrichGO(gene = sigResponse_down,
universe = bg_genes,
keyType = "ENSEMBL",
OrgDb = "org.Hs.eg.db",
ont = "BP",
qvalueCutoff = 0.05,
pAdjustMethod = "BH",
readable = TRUE)
saveRDS(compGO, compgo_file)
}
results_down <- data.frame(compGO@result) %>% dplyr::filter(p.adjust < 0.05)
print("Down")
## [1] "Down"
nrow(results_down)
## [1] 4
write_csv(results_down, "tables/T21.day8.GO_BP_DOWN.csv")
dotplot(compGO,
showCategory = 20,
title = "GO (Biological Process) Enrichment \n Analysis for Down in pCR)",
label_format = 20,
font.size = 10)
bg_genes <- rownames(resResponse)
## Run GO enrichment analysis
compgo_file <- "data/day8.compgo.up.mf.RDS"
if (file.exists(compgo_file)){
compGO <- readRDS(compgo_file)
}else{
compGO <- enrichGO(gene = sigResponse_up,
universe = bg_genes,
keyType = "ENSEMBL",
OrgDb = "org.Hs.eg.db",
ont = "MF",
qvalueCutoff = 0.05,
pAdjustMethod = "BH",
readable = TRUE)
saveRDS(compGO, compgo_file)
}
# image pdf 12 x 12
## Output results from GO analysis to a table
print("UP")
## [1] "UP"
results_up <- data.frame(compGO@result) %>% dplyr::filter(p.adjust < 0.05)
nrow(results_up)
## [1] 28
write_csv(results_up, "tables/T22.day8.GO_MF_UP.csv")
dotplot(compGO,
showCategory = 20,
title = "GO (Molecular Function) Enrichment \n Analysis for UP in pCR)",
label_format = 20,
font.size = 10)
compgo_file <- "data/day8.compgo.down.mf.RDS"
if (file.exists(compgo_file)){
compGO <- readRDS(compgo_file)
}else{
compGO <- enrichGO(gene = sigResponse_down,
universe = bg_genes,
keyType = "ENSEMBL",
OrgDb = "org.Hs.eg.db",
ont = "MF",
qvalueCutoff = 0.05,
pAdjustMethod = "BH",
readable = TRUE)
saveRDS(compGO, compgo_file)
}
results_down <- data.frame(compGO@result) %>% dplyr::filter(p.adjust < 0.05)
print("Down")
## [1] "Down"
nrow(results_down)
## [1] 0
write_csv(results_up, "tables/T22.day8.GO_MF_DOWN.csv")
if (nrow(results_down) > 0){
dotplot(compGO,
showCategory = 20,
title = "GO (Molecular Function) Enrichment \n Analysis for DOWN in pCR)",
label_format = 20,
font.size = 10)
}
bg_genes <- rownames(resResponse)
## Run GO enrichment analysis
compgo_file <- "data/day8.compgo.up.cc.RDS"
if (file.exists(compgo_file)){
compGO <- readRDS(compgo_file)
}else{
compGO <- enrichGO(gene = sigResponse_up,
universe = bg_genes,
keyType = "ENSEMBL",
OrgDb = "org.Hs.eg.db",
ont = "CC",
qvalueCutoff = 0.05,
pAdjustMethod = "BH",
readable = TRUE)
saveRDS(compGO, compgo_file)
}
# image pdf 12 x 12
## Output results from GO analysis to a table
print("UP")
## [1] "UP"
results_up <- data.frame(compGO@result) %>% dplyr::filter(p.adjust < 0.05)
nrow(results_up)
## [1] 71
write_csv(results_up, "tables/T23.day8.GO_CC_UP.csv")
dotplot(compGO,
showCategory = 20,
title = "GO (Cellular compartment) Enrichment \n Analysis for UP in pCR)",
label_format = 20,
font.size = 10)
compgo_file <- "data/day8.compgo.down.cc.RDS"
if (file.exists(compgo_file)){
compGO <- readRDS(compgo_file)
}else{
compGO <- enrichGO(gene = sigResponse_down,
universe = bg_genes,
keyType = "ENSEMBL",
OrgDb = "org.Hs.eg.db",
ont = "CC",
qvalueCutoff = 0.05,
pAdjustMethod = "BH",
readable = TRUE)
saveRDS(compGO, compgo_file)
}
results_down <- data.frame(compGO@result) %>% dplyr::filter(p.adjust < 0.05)
print("Down")
## [1] "Down"
nrow(results_down)
## [1] 0
write_csv(results_up, "tables/T24.day8.GO_CC_DOWN.csv")
if (nrow(results_down) > 0){
dotplot(compGO,
showCategory = 20,
title = "GO (Cellular compartment) Enrichment \n Analysis for DOWN in pCR)",
label_format = 20,
font.size = 10)
}
sessionInfo()
## R version 4.0.5 (2021-03-31)
## Platform: x86_64-redhat-linux-gnu (64-bit)
## Running under: Fedora 32 (Workstation Edition)
##
## Matrix products: default
## BLAS/LAPACK: /usr/lib64/libopenblas-r0.3.12.so
##
## locale:
## [1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8
## [5] LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
## [7] LC_PAPER=en_CA.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] parallel stats4 stats graphics grDevices utils datasets
## [8] methods base
##
## other attached packages:
## [1] writexl_1.4.0 clusterProfiler_3.18.1
## [3] org.Hs.eg.db_3.12.0 ensembldb_2.14.1
## [5] AnnotationFilter_1.14.0 GenomicFeatures_1.42.3
## [7] AnnotationDbi_1.52.0 AnnotationHub_2.22.1
## [9] BiocFileCache_1.14.0 dbplyr_2.1.1
## [11] knitr_1.33 ggrepel_0.9.1
## [13] tximport_1.18.0 DEGreport_1.26.0
## [15] pheatmap_1.0.12 RColorBrewer_1.1-2
## [17] forcats_0.5.1 stringr_1.4.0
## [19] dplyr_1.0.7 purrr_0.3.4
## [21] readr_1.4.0 tidyr_1.1.3
## [23] tibble_3.1.2 ggplot2_3.3.5
## [25] tidyverse_1.3.1 DESeq2_1.30.1
## [27] SummarizedExperiment_1.20.0 Biobase_2.50.0
## [29] MatrixGenerics_1.2.1 matrixStats_0.59.0
## [31] GenomicRanges_1.42.0 GenomeInfoDb_1.26.7
## [33] IRanges_2.24.1 S4Vectors_0.28.1
## [35] BiocGenerics_0.36.1
##
## loaded via a namespace (and not attached):
## [1] utf8_1.2.1 tidyselect_1.1.1
## [3] RSQLite_2.2.7 grid_4.0.5
## [5] BiocParallel_1.24.1 scatterpie_0.1.6
## [7] munsell_0.5.0 withr_2.4.2
## [9] colorspace_2.0-2 GOSemSim_2.16.1
## [11] highr_0.9 rstudioapi_0.13
## [13] DOSE_3.16.0 labeling_0.4.2
## [15] lasso2_1.2-21.1 GenomeInfoDbData_1.2.4
## [17] polyclip_1.10-0 mnormt_2.0.2
## [19] farver_2.1.0 bit64_4.0.5
## [21] downloader_0.4 vctrs_0.3.8
## [23] generics_0.1.0 xfun_0.22
## [25] R6_2.5.0 graphlayouts_0.7.1
## [27] clue_0.3-59 locfit_1.5-9.4
## [29] bitops_1.0-7 cachem_1.0.5
## [31] reshape_0.8.8 fgsea_1.16.0
## [33] DelayedArray_0.16.3 assertthat_0.2.1
## [35] promises_1.2.0.1 scales_1.1.1
## [37] ggraph_2.0.5 enrichplot_1.10.2
## [39] gtable_0.3.0 Cairo_1.5-12.2
## [41] conquer_1.0.2 tidygraph_1.2.0
## [43] MatrixModels_0.5-0 rlang_0.4.11
## [45] genefilter_1.72.1 GlobalOptions_0.1.2
## [47] splines_4.0.5 rtracklayer_1.50.0
## [49] lazyeval_0.2.2 broom_0.7.8
## [51] BiocManager_1.30.16 yaml_2.2.1
## [53] reshape2_1.4.4 modelr_0.1.8
## [55] backports_1.2.1 httpuv_1.6.1
## [57] qvalue_2.22.0 tools_4.0.5
## [59] psych_2.1.6 logging_0.10-108
## [61] ellipsis_0.3.2 ggdendro_0.1.22
## [63] Rcpp_1.0.7 plyr_1.8.6
## [65] progress_1.2.2 zlibbioc_1.36.0
## [67] RCurl_1.98-1.3 prettyunits_1.1.1
## [69] openssl_1.4.4 viridis_0.6.1
## [71] GetoptLong_1.0.5 cowplot_1.1.1
## [73] haven_2.4.1 cluster_2.1.1
## [75] fs_1.5.0 magrittr_2.0.1
## [77] magick_2.7.2 data.table_1.14.0
## [79] DO.db_2.9 SparseM_1.81
## [81] circlize_0.4.13 reprex_2.0.0
## [83] tmvnsim_1.0-2 ProtGenerics_1.22.0
## [85] hms_1.1.0 mime_0.11
## [87] evaluate_0.14 xtable_1.8-4
## [89] XML_3.99-0.6 readxl_1.3.1
## [91] gridExtra_2.3 shape_1.4.6
## [93] compiler_4.0.5 biomaRt_2.46.3
## [95] shadowtext_0.0.8 crayon_1.4.1
## [97] htmltools_0.5.1.1 later_1.2.0
## [99] geneplotter_1.68.0 lubridate_1.7.10
## [101] DBI_1.1.1 tweenr_1.0.2
## [103] ComplexHeatmap_2.6.2 MASS_7.3-53.1
## [105] rappdirs_0.3.3 Matrix_1.3-4
## [107] cli_3.0.1 igraph_1.2.6
## [109] pkgconfig_2.0.3 rvcheck_0.1.8
## [111] GenomicAlignments_1.26.0 xml2_1.3.2
## [113] annotate_1.68.0 XVector_0.30.0
## [115] rvest_1.0.0 digest_0.6.27
## [117] ConsensusClusterPlus_1.54.0 Biostrings_2.58.0
## [119] rmarkdown_2.6 cellranger_1.1.0
## [121] fastmatch_1.1-0 edgeR_3.32.1
## [123] curl_4.3.2 quantreg_5.86
## [125] shiny_1.6.0 Rsamtools_2.6.0
## [127] rjson_0.2.20 lifecycle_1.0.0
## [129] nlme_3.1-152 jsonlite_1.7.2
## [131] viridisLite_0.4.0 askpass_1.1
## [133] limma_3.46.0 fansi_0.5.0
## [135] pillar_1.6.1 lattice_0.20-41
## [137] Nozzle.R1_1.1-1 fastmap_1.1.0
## [139] httr_1.4.2 survival_3.2-10
## [141] GO.db_3.12.1 interactiveDisplayBase_1.28.0
## [143] glue_1.4.2 png_0.1-7
## [145] BiocVersion_3.12.0 bit_4.0.4
## [147] ggforce_0.3.3 stringi_1.7.3
## [149] blob_1.2.1 memoise_2.0.0